From a17ed9485b425e99bd8ec403cffda4fe2cac8877 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Tue, 12 Jul 2005 07:47:21 +0000 Subject: [PATCH] Fix the x86_64 build after the PAE check-in. Signed-off-by: Jun Nakajima --- .../arch/xen/i386/mm/hypervisor.c | 2 +- .../arch/xen/x86_64/mm/init.c | 38 +++++++++---------- .../asm-xen/asm-x86_64/mach-xen/mach_time.h | 2 +- .../include/asm-xen/asm-x86_64/pgtable.h | 8 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c b/linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c index ed71010e14..0e19e846fd 100644 --- a/linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c +++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c @@ -343,7 +343,7 @@ unsigned long allocate_empty_lowmem_region(unsigned long pages) pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE))); pfn_array[i] = pte_mfn(*pte); #ifdef CONFIG_X86_64 - xen_l1_entry_update(pte, 0); + xen_l1_entry_update(pte, __pte(0)); #else HYPERVISOR_update_va_mapping(vstart + (i*PAGE_SIZE), __pte_ma(0), 0); #endif diff --git a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c index 0efcf264fa..0bb164a88c 100644 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c @@ -67,7 +67,7 @@ static int init_mapping_done; static void __make_page_readonly(unsigned long va) { unsigned long addr; - pte_t *pte; + pte_t pte, *ptep; unsigned long *page = (unsigned long *) init_level4_pgt; addr = (unsigned long) page[pgd_index(va)]; @@ -79,15 +79,16 @@ static void __make_page_readonly(unsigned long va) addr = page[pmd_index(va)]; addr_to_page(addr, page); - pte = (pte_t *) &page[pte_index(va)]; - xen_l1_entry_update(pte, (*(unsigned long*)pte) & ~_PAGE_RW); + ptep = (pte_t *) &page[pte_index(va)]; + pte.pte = (ptep->pte & ~_PAGE_RW); + xen_l1_entry_update(ptep, pte); __flush_tlb_one(addr); } static void __make_page_writable(unsigned long va) { unsigned long addr; - pte_t *pte; + pte_t pte, *ptep; unsigned long *page = (unsigned long *) init_level4_pgt; addr = (unsigned long) page[pgd_index(va)]; @@ -99,8 +100,9 @@ static void __make_page_writable(unsigned long va) addr = page[pmd_index(va)]; addr_to_page(addr, page); - pte = (pte_t *) &page[pte_index(va)]; - xen_l1_entry_update(pte, (*(unsigned long*)pte)| _PAGE_RW); + ptep = (pte_t *) &page[pte_index(va)]; + pte.pte = (ptep->pte | _PAGE_RW); + xen_l1_entry_update(ptep, pte); __flush_tlb_one(addr); } @@ -110,7 +112,7 @@ static void __make_page_writable(unsigned long va) */ void make_page_readonly(void *va) { - pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t *pte; + pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t pte, *ptep; unsigned long addr = (unsigned long) va; if (!init_mapping_done) { @@ -121,14 +123,15 @@ void make_page_readonly(void *va) pgd = pgd_offset_k(addr); pud = pud_offset(pgd, addr); pmd = pmd_offset(pud, addr); - pte = pte_offset_kernel(pmd, addr); - xen_l1_entry_update(pte, (*(unsigned long*)pte)&~_PAGE_RW); + ptep = pte_offset_kernel(pmd, addr); + pte.pte = (ptep->pte & ~_PAGE_RW); + xen_l1_entry_update(ptep, pte); __flush_tlb_one(addr); } void make_page_writable(void *va) { - pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t *pte; + pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t pte, *ptep; unsigned long addr = (unsigned long) va; if (!init_mapping_done) { @@ -139,8 +142,9 @@ void make_page_writable(void *va) pgd = pgd_offset_k(addr); pud = pud_offset(pgd, addr); pmd = pmd_offset(pud, addr); - pte = pte_offset_kernel(pmd, addr); - xen_l1_entry_update(pte, (*(unsigned long*)pte)|_PAGE_RW); + ptep = pte_offset_kernel(pmd, addr); + pte.pte = (ptep->pte | _PAGE_RW); + xen_l1_entry_update(ptep, pte); __flush_tlb_one(addr); } @@ -276,7 +280,7 @@ static void set_pte_phys(unsigned long vaddr, if (!pte_none(*pte) && pte_val(*pte) != (pte_val(new_pte) & __supported_pte_mask)) pte_ERROR(*pte); - xen_l1_entry_update(pte, new_pte.pte); + xen_l1_entry_update(pte, new_pte); /* * It's enough to flush this one mapping. @@ -331,16 +335,12 @@ static void set_pte_phys_ma(unsigned long vaddr, new_pte = pfn_pte_ma(phys >> PAGE_SHIFT, prot); pte = pte_offset_kernel(pmd, vaddr); - if (!pte_none(*pte) && - pte_val_ma(*pte) != (pte_val_ma(new_pte) & __supported_pte_mask)) - pte_ERROR(*pte); - /* * Note that the pte page is already RO, thus we want to use * xen_l1_entry_update(), not set_pte(). */ xen_l1_entry_update(pte, - (pfn_pte_ma(phys >> PAGE_SHIFT, prot).pte)); + pfn_pte_ma(phys >> PAGE_SHIFT, prot)); /* * It's enough to flush this one mapping. @@ -575,7 +575,7 @@ void __init extend_init_mapping(void) __pgprot(_KERNPG_TABLE | _PAGE_USER)); pte = (pte_t *) &pte_page[pte_index(va)]; - xen_l1_entry_update(pte, new_pte.pte); + xen_l1_entry_update(pte, new_pte); extended_size += PAGE_SIZE; } } diff --git a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_time.h b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_time.h index b749aa44a8..4db611ecb0 100644 --- a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_time.h +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_time.h @@ -7,7 +7,7 @@ #ifndef _MACH_TIME_H #define _MACH_TIME_H -#include +#include /* for check timing call set_rtc_mmss() 500ms */ /* used in arch/i386/time.c::do_timer_interrupt() */ diff --git a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h index 25a884c08a..38d3db06fb 100644 --- a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h @@ -91,10 +91,10 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)]; extern inline int pud_present(pud_t pud) { return !pud_none(pud); } #ifdef CONFIG_SMP -#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval).pte) +#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval)) #else -#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval.pte)) +#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval)) #if 0 static inline void set_pte(pte_t *dst, pte_t val) { @@ -347,7 +347,7 @@ static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma, unsigned pte_t pte = *ptep; int ret = pte_dirty(pte); if (ret) - xen_l1_entry_update(ptep, pte_mkclean(pte).pte); + xen_l1_entry_update(ptep, pte_mkclean(pte)); return ret; } @@ -356,7 +356,7 @@ static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned pte_t pte = *ptep; int ret = pte_young(pte); if (ret) - xen_l1_entry_update(ptep, pte_mkold(pte).pte); + xen_l1_entry_update(ptep, pte_mkold(pte)); return ret; } -- 2.30.2